package hao.itheima.service;

import hao.itheima.dao.DeptDao;
import hao.itheima.dao.DeptDaoImpl;
import hao.itheima.entity.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;

/*
@Primary // 表示这个类是默认的实现类, 如果有多个实现类, 可以通过这个注解指定默认的实现类
        //指定该Bean优先级最高
*/

//@Component // 程序启动的时候, 会自动创建对象, 并交给IOC(spring容器)容器管理 -- 控制反转IOC的实现
//                                              这两个是效果是一样的
@Service("service") // 其实与@Component是等价的 用来标识当前类属于逻辑处理类-- 效果也是将对象交给IOC容器管理
//可以通过value属性设置bean对象的名字, 默认是类名首字母小写
public class DeptServiceImpl implements DeptService {

    //1、创建dao层对象
    //面向接口编程
//    private DeptDao dao = new DeptDaoImpl();
    @Autowired// 从spring容器(IOC容器)中, 自动寻找对象, 为该变量赋值
    private DeptDao dao;

    public List<Dept> list() {
        //1.获取数据,调用dao层
        List<String> strings = dao.list();
        //2.处理数据,封装成对象
        List<Dept> depts = strings.stream().map((str) -> {
            //1.安装要去截取字符串
            String[] split = str.split(",");
            //2.获取数组中的每一个数据
            Integer id = Integer.parseInt(split[0]);
            String name = split[1];
            LocalDateTime update = LocalDateTime.parse(split[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            //3.创建对象并返回
            return new Dept(id, name, update);
        }).collect(Collectors.toList());// 可以简写成.toList();

        //3.返回数据
        return depts;
    }
}
